package com.example.leetcode.prcatice;

import java.util.HashMap;
import java.util.Map;

/**
 * 给你一个二元数组 nums ，和一个整数 goal ，请你统计并返回有多少个和为 goal 的 非空 子数组。
 *
 * <p>子数组 是数组的一段连续部分。
 *
 * <p>输入：nums = [1,0,1,0,1], goal = 2 输出：4
 *
 * <p>输入：nums = [0,0,0,0,0], goal = 0 输出：15
 * 和相同的二元数组
 */
public class Test930 {

    /*
       nums[j] - nums[i] = goal;

     */
    public int numSubarraysWithSum(int[] nums, int goal) {
        int sum = 0; //前缀和
        Map<Integer,Integer> map = new HashMap<>();
        int result =0;
        for ( int i: nums) {
            map.put(sum, map.getOrDefault(sum, 0) + 1);//(0,1),(1,1),(1,2)(2,1),(2,2)
            sum += i;//1 ,1,2,2,3
            result += map.getOrDefault(sum - goal, 0); //0,0,1,2,4
        }
        return result;
    }
}

class Demo930{
  public static void main(String[] args) {
    Test930 t = new Test930();
    int[]nums = {1,0,1,0,1};
    System.out.println(t.numSubarraysWithSum(nums,2));
  }
}